#ifndef NOTREE_H_
#define NOTREE_H_

#include <list>

enum Type {
	TERMINAL,NAOTERMINAL
};

#include <iostream>
using namespace std;

class noTree {
public:
	noTree();
	/*
	 * funcoes da arvore
	 */

	void renewNivel(noTree*);
	noTree *addSon(string);
	noTree *addSon(list<string>*);
	noTree *addSubTree(noTree*);
	void percorreNodeReverse(int&,noTree*);

	/*
	 * Metodos Set
	 */
	void setNode(int,string);
	void setNode(int,list<string>*);
	void setNodeFather(noTree*);
	void setTipoNode(Type);
	void setLinhaNode(int);
	void setNivelNode(int);
	void setNameProcedureFunctionMepa(string);

	/*
	 * Metodos Get
	 */

	string getNameProcedureFunctionMepa() const;
	Type getTipoNode() const;
	int getLinhaNode() const;
	string getConteudoSimplesNode();
	list<string>*getConteudoExpressaoNode();
	int getNivelNode() const;
	bool hasSons() const;
	noTree *getNodeFather() const;
	list<noTree*>*getSons()const;

	virtual ~noTree();

private:

	string nameProcedureFunctionMepa;
	Type typeNode;
	string conteudoSimplesNode;
	list<string> *conteudoExpressaoNode;
	int nivelNode;
	int linhaNode;
	noTree *nodeFather;
	list<noTree*> *nodeSons;

};

#endif /*NOTREE_H_*/
